package com.gdepri.cabelwellserver.handler;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;

//byte数组报文解析器
public class ByteArrHandler {
    private Logger logger = LoggerFactory.getLogger(ByteArrHandler.class);
    /**
     * 会把msgByteTestArr1中的报文都剪出来，然后放到arraylist对象中
     * @return
     */
    public  ArrayList<byte[]> findMsgs(ArrayList<Byte> byteArr){
        ArrayList<byte[]> msgs = new ArrayList<>();
        int index1 = 0;
        int index2 = 1;
        while(byteArr.size()>0 && index1<index2){
            logger.info("当前数据缓存区的大小为："+byteArr.size());
            boolean findStart = false;
            int start = -1;
            int end = -1;
            boolean findEnd = false;
            for(int i=0;i<byteArr.size();i++){
                //logger.info("循环："+msgByteArr[i]);
                if((byte)0xE9 == byteArr.get(i) && !findStart){
                    findStart = true;
                    start=i;
                }
                if((byte)0x9E == byteArr.get(i) && !findEnd){
                    findEnd = true;
                    end=i;
                }
                if(findStart&&findEnd){
                    break;
                }
            }
            int length = end - start +1;//新的数组的长度
            byte[] ass = new byte[length];

            byte[] res = new byte[byteArr.size()-length];//剩下的数组的长度
            ArrayCopy(byteArr,start,ass,0,length);
            ArrayCopy(byteArr,length,res,0,byteArr.size()-length);

            if(ass.length>0){
                msgs.add(ass);
                index2++;
            }
            index1++;
            //未消费的数据
            ArrayList<Byte> arr = new ArrayList<>();
            for(int i=0;i<res.length;i++){
                arr.add(res[i]);
            }
            byteArr = arr;
        }
        return msgs;
    };

    /**
     * 数组拷贝,把byteArr数组中的数据拷贝到dest数组中
     * @param byteArr byteArr的ArrayList
     * @param srcPos  byteArr的起始位置
     * @param dest    目标数组
     * @param destPos 目标数组的起始位置
     * @param length  长度
     */
    public void ArrayCopy(ArrayList<Byte> byteArr,int srcPos,byte[] dest,int destPos,int length){
            for(int i=srcPos;i<length;i++){
                dest[destPos+i] = byteArr.get(srcPos+i);
            }
    }



}

